package top.tenebrous.yzl.im;

import top.tenebrous.yzl.im.message.MessageBody;
import top.tenebrous.yzl.im.message.MessageNotice;
import top.tenebrous.yzl.im.model.ImClientChatListBean;
import top.tenebrous.yzl.im.model.ImClientFriendsBean;
import top.tenebrous.yzl.im.model.ImClientGroupBean;
import top.tenebrous.yzl.im.model.ImClientUserBean;

import java.util.ArrayList;
import java.util.List;

/**
 * yzl-im 需实现该接口，提供用户信息，朋友信息，组信息，聊天记录信息等
 * 通过异步加载方式，提高数据加载效率，从而提高响应
 * 该接口必须实现和重写其中的方法，并将其加入spring容器，若未实现与重写，会出现意想不到的错误
 *
 * @author yazhang6
 */
public interface ImChatProcessor {

    /**
     * 获取用户信息
     *
     * @param userId        用户id
     * @return              用户信息
     */
    ImClientUserBean takeAfterChatUserInfo(String userId);

    /**
     * 获取好友列表信息
     *
     * @param userId
     * @return
     */
    default List<ImClientFriendsBean> takeAfterChatFriendsInfo(String userId) {
        return new ArrayList<>();
    };

    /**
     * 获取群组列表信息
     *
     * @param userId
     * @return
     */
    default List<ImClientGroupBean> takeAfterChatGroupsInfo(String userId) {
        return new ArrayList<>();
    };

    /**
     * 获取好友列表信息
     *
     * @param userId
     * @return
     */
    default List<ImClientChatListBean> takeAfterChatListInfo(String userId) {
        return new ArrayList<>();
    };

    /**
     * 获取好友置顶列表信息
     *
     * @param userId
     * @return
     */
    default List<ImClientChatListBean> takeAfterChatListTopInfo(String userId) {
        return new ArrayList<>();
    };

    /**
     * 获取好友列表信息
     *
     * @param userId
     * @return
     */
    ImClientFriendsBean takeChatFriendInfo(String userId, String friendId);

    /**
     * 获取群组信息
     *
     * @param groupId
     * @return
     */
    ImClientGroupBean takeChatGroupInfo(String groupId, String userId);

    /**
     * 更新系统消息
     *
     * @param message
     */
    void updateSystemMessage(MessageBody message);
}
